Tenha em mente que o browser pode renderizar uma simples letra A ou
uma tag e tudo, tudo pra ele são caixas como se fossem quadrados como no desenho abaixo :
Por default o browser utiliza como position padrão o Static que funciona muito bem na maioria dos casos mas algumas vezes precisamos fazer algo mais elaborado.
A propriedade position pode assumir 4 valores diferentes:
Static, Relative, Absolute e Fixed.
Segue abaixo a explicação para de cada uma:
Esse é o valor default de todo elemento HTML, ou seja, ele vai
seguir o fluxo comum da sua página como a maneira que a lemos, de cima
para baixo e da direita para esquerda.
Ex: h1 { position: static }
Neste tipo de posicionamento ele segue o padrão de elemento inline (em linha) ou elemento em bloco (block). O Inline (em linha) é exibido um seguido do outro na mesma linha e o em bloco (block) ocupa exclusivamente uma linha inteira.
Dizemos que no position:static a âncora do elemento esta no seu elemento antecessor.
Como o próprio nome diz, relativo a posição que o browser normalmente exibiria o elemento.
Sendo assim, este posicionamento permite um deslocamento do elemento de sua posição original que seria atribuida automaticamente pelo browser. É um pequeno deslocamento (top, right, boottom, left que pode ser feito em relação a sua posição original
Utilizando o position Relative o elemento aceita as propriedades Top, Bottom, Left e Right para definir o quanto da posição original o elemento será deslocado.
No Position Relative a âncora é a posição onde o elemento atual seria renderizado, portanto os deslocamentos feitos pelos parâmetros Top, Bottom, Left e Right são feitos relativos a posição que o elemento ocuparia sem o position relative.
Com elas você pode alterar o posicionamento do elemento. Ex:
Resultado: Notem que o h1 se posicionou de acordo com o left e top (devido ao position:relative) enquanto o h2 manteve o posicionamento comum e ignorou os valores do left e top.
Isso se deve porque elementos com position static (default) não podem ser posicionados.
Dizemos que no position:static a âncora do elemento esta no seu elemento antecessor.
Com o position absolute a âncora do elemento não fica no seu antecessor mas sim no elemento pai do antecessor.
O elemento pai de maior nível hierárquico é o body.
Então, tecnicamente falando, se eu exibir um monte de tags com position absolute elas serão escritas sempre no mesmo lugar porque estão 'mirando' no elemento pai.
Vamos para um exemplo.
Com ele você pode posicionar qualquer elemento de acordo com o elemento pai que tenha
um position diferente de static.
O elemento DIV é pai dos elementos H1, P e 'avô' do SPAN.
Os elementos H1, P são filhos do elemento DIV e SPAN é o neto do Div.
Os elementos H1 e P são irmãos por estarem no mesmo nível.
E o elemento SPAN é filho do elemento H1 e também 'neto' do elemento DIV.
Eu disse acima 'avô' ou ''neto' mas na realidade só existe pai e filho numa hierarquia muito bem definida. Fica mais didático. Portanto no elemento span você teria que procurar o pai e achando o pai teria que procurar o pai para achar o avô.
Uma particularidade do position:absolute é que os elementos são exibidos 'em outro contexto', ou seja, no position static e relative seguem um 'fluxo comum' mas o absolute segue outro, digamos, um segundo fluxo ou um 'fluxo alternativo' e o espaço ocupado pelos elementos do position absolute não é contabilizado pelo fluxo normal e vice-versa.
Portanto é preciso ter cuidado ao utilizar o positon absolute pois ele deixa de fazer parte do fluxo comum do documento e o espaço destinado a ele deixa de 'contar' no documento.
É muito fácil 'encavalar' tags no documento especialmente em sites responsivos.